#ifndef GAMEPANEL_H
#define GAMEPANEL_H

#include <QMainWindow>
#include "gamecontrol.h"
#include "cardpanel.h"
#include <QLabel>
#include <QTimer>
namespace Ui {
class GamePanel;
}

class GamePanel : public QMainWindow
{
    Q_OBJECT

public:
    void extracted();
    explicit GamePanel(QWidget *parent = nullptr);
    ~GamePanel();
    // 初始化 游戏控制类 函数
    void GameControlInit();
    // 更新面板分数
    void updatePlayerScore();
    // 切割并存储图片
    void initCardMap();
    // 裁剪图片
    void cropImage(QPixmap &pix, int x, int y, Card &c);
    // 初始化游戏按钮组
    void initButtonsGroup();
    // 初始化玩家在窗口中上下文环境
    void initPlayerContext();

    // 处理游戏的状态
    void gameStatusPrecess(GameControl::GameStatus status);
   //
    void startDispatchCard();
    void initGameScene();

    // 定时器的处理动作
    void onDispatchCard();


    // 处理分发得到的扑克牌
    void disposeCard(Player* player, const Cards& cards);

    void cardMoveStep(Player* player,int curPos);

protected:
    void paintEvent(QPaintEvent* ev);

private:
    enum CardAlign{Horizontal, Vertical};
    // 游戏状态
    enum GameStatus
    {
        DispatchCard,
        CallingLord,
        PlayingHand
    };
    struct PlayerContext
    {
        // 1 显示扑克片区域
        QRect cardRect;
        // 2 出牌区域
        QRect playHandRect;
        //3 扑克片 显示正面还是反面
        CardAlign align;
        //4 扑克牌对齐方式
        bool isFrontSide;
        //5 游戏过程中提示信息 比如 不出
        QLabel* info;
        //6 玩家的头像
        QLabel* roleImg;
        // 7 玩家刚打出的牌
        Cards lastCards;
    };

    Ui::GamePanel *ui;
    QPixmap m_bkImage;
    GameControl* m_gameCtl;
    QVector<Player*> m_playerList;
    //
    QMap<Card,  CardPanel*> m_cardMap;
    QSize m_cardSize;
    QPixmap m_cardBackImg;
    QMap<Player*, PlayerContext> m_contextMap;
    CardPanel* m_baseCard;
    CardPanel* m_moveCard;
    QVector<CardPanel*> m_last3Card;
    QPoint m_baseCardPos;
    GameControl::GameStatus m_gameStatus;
    QTimer* m_timer;
};

#endif // GAMEPANEL_H
